Intouch报表制作方法
Intouch自带趋势功能即可满足日常报表功能制作,大体步骤: 1、在intouch中导入报表生成控件,生成初始报表.csv文件 2、在intouch中导入office插件,可以在intouch中显示初始的报表csv文件; 3、将实际需要的报表模板,关联到初始报表.csv文件当中去
一、intouch中导入报表生成控件 1.1 导入控件 新建报表窗口,命名随便;
点击向导(类似魔法帽的图标)选择趋势下面的,历史数据向导; 注意,导入这个插件的同时,会自动导入与这个插件相关的一些变量,到下一步写脚本的时候就可以用到了,不需要自己建立相关内存变量;如果第一次做实验或者不熟悉这个插件,不建议自己手动建立相关变量。
1.2 编写脚本 当脚本触发是,intouch将会把脚本中的模拟量点按照自带趋势中的数值写入预定的一个.csv文件当中去。 先将脚本全貌贴上,实际项目中报表需要的模拟量巨大,所以报表显得有点长。。。=。=; HDWDataDir = "E:\HIS"; HDWDBDir = InfoInTouchAppDir(); HDWStartDate = Report_DB_Date; HDWStartTime = "00:00:00"; HDWFilename = "D:\Report.csv"; HDWTags ="$Date,$Time,PIT_1101,PIT_1102,PIT_1103,TIT_1101_R,PDIT_1101A_R,PDIT_1101B_R,FIQT_1101A_R,FIQT_1101B_R,+"; HDWTags1 = "PIT_1104,TIT_1102_R,PDIT_1401_R,PDIT_1402_R,PDIT_1403_R,FIQT_1401_R,FIQT_1402_R,FIQT_1403_R,PIT_1412_R,PIT_1413_R,PIT_1414_R,+"; HDWTags2 ="PIT_1202_R,TIT_1201_R,PIT_1201_R,PIT_1204_R,TIT_1202_R,PIT_1205_R,TIT_1203_R,PIT_1206_R,TIT_1204_R,PIT_1207_R,TIT_1205_R,+"; HDWTags3 ="PIT_1203_R,TIT_1206_R,PIT_1208_R,TIT_1207_R,PIT_1209_R,TIT_1208_R,PIT_1210_R,TIT_1209_R,+"; HDWTags4 ="TIT_1301_R,TIT_1302_R,TIT_1303_R,LIT_1302_R,LDIT_1301_R,TIT_1304_R,TIT_1305_R,TIT_1306_R,LIT_1306_R,LDIT_1305_R,+"; HDWTags5 = "TIT_1307_R,LIT_1309_R,TIT_1308_R,TIT_1309_R,TIT_1310_R,LIT_1313_R,LDIT_1312_R,TIT_1324_R,LIT_1340_R,TIT_1322_R,LIT_1334_R,+"; HDWTags6 ="TIT_1311_R,TIT_1312_R,TIT_1313_R,LIT_1317_R,LDIT_1316_R,TIT_1314_R,TIT_1315_R,TIT_1316_R,LIT_1321_R,LDIT_1320_R,+"; HDWTags7 ="TIT_1317_R,TIT_1318_R,TIT_1319_R,LIT_1325_R,LDIT_1324_R,TIT_1320_R,LIT_1328_R,TIT_1321_R,LIT_1331_R,TIT_1323_R,LIT_1337_R,+"; HDWTags8 ="LIT_1501_R,PIT_1415_R,PIT_1416_R,FIQT_1404_R,PIT_1417_R,PIT_1418_R,PIT_1401,PIT_1402,PIT_1403,+"; HDWTags9 = "PIT_1404,PIT_1405,PIT_1406,PIT_1407,PIT_1408,PIT_1409,PIT_1410,PIT_1411,LIT_3101_R,+"; HDWTags10 ="LIT_3105_R,LIT_3106_R,LIT_3201_R,FIQT_3201_R,FIQT_3203_R,LIT_3211_R,LIT_3212_R,FIQT_3202_R+"; HDWTags11 ="LIT_3208_R,LIT_3207_R,LIT_3210_R,LIT_3209_R,PIT_4101_R,LIT_2102_R,LIT_3103_R,+"; HDWTags12 ="FIQT_1101A_SUM,FIQT_1101B_SUM,FIQT_1404_SUM,FIQT_1401_SUM,FIQT_1402_SUM,FIQT_1403_SUM,FIQT_3203_SUM,FIQT_3202_SUM,FIQT_3201_SUM,+"; HDWTags13 ="ZQGL_A_01,ZQGL_A_02,ZQGL_A_03,ZQGL_A_04,ZQGL_A_05,ZQGL_A_06,+"; HDWTags14 ="ZQGL_B_01,ZQGL_B_02,ZQGL_B_03,ZQGL_B_04,ZQGL_B_05,ZQGL_B_06,+"; HDWTags15 ="ZQGL_C_01,ZQGL_C_02,ZQGL_C_03,ZQGL_C_04,ZQGL_C_05,ZQGL_C_06+"; HDWTags16 ="ZQGL_A_07,ZQGL_A_08,ZQGL_A_09,ZQGL_A_10,ZQGL_A_11,ZQGL_A_12,+"; HDWTags17 = "ZQGL_B_07,ZQGL_B_08,ZQGL_B_09,ZQGL_B_10,ZQGL_B_11,ZQGL_B_12+"; HDWTags18 ="ZQGL_C_07,ZQGL_C_08,ZQGL_C_09,ZQGL_C_10,ZQGL_C_11,ZQGL_C_12"; HDWInterval = "1H"; HDWDuration = "23H"; HDWWriteFile = 1; IF HDWStatus ==1 THEN #spreadsheet1.csvurl = "D:\Report.csv"; #spreadsheet1.refresh(); #spreadsheet1.displaytoolbar = "False"; #spreadsheet1.ViewOnlyMode = "True"; ENDIF;
1.2.1 第一部分是常规设置部分 HDWDataDir = "E:\HIS"; HDWDBDir = InfoInTouchAppDir(); HDWStartDate = Report_DB_Date; HDWStartTime = "00:00:00"; HDWFilename = "D:\Report.csv";
这一部分五个参数其中三个非常关键,第一个hdwdatedir,这个要匹配当下工程的历史趋势的路径。路径查询办法见下图。
第二个参数默认即可; 第三个参数这是一个自己建的中间变量,类型是内存消息。这个就是选择的报表日期,我将这个值,赋给hdwstartdate的时候,就将报表定在这一天了。这里日期赋值可能有些麻烦,在本文最后写个专题。 第四个默认即可,从0点开始写,一行一行的。 第五个,是你的初始报表的路径,这个需要自己手动建立一个CSV文件,空的就行,放在这个路径里,当报表运行的时候,这个文件不能处于编辑模式; 这五个参数决定了报表的成败。
1.2.2 报表赋值部分 总脚本的第二部分是报表点写入部分,就是报表的列部分,将我们需要产生报表的标记点,一个一个写进去,这一部比较繁琐。但没什么难点。 HDWTags ="$Date,$Time,PIT_1101,PIT_1102,PIT_1103,TIT_1101_R,PDIT_1101A_R,PDIT_1101B_R,FIQT_1101A_R,FIQT_1101B_R,+"; 写入办法就是赋值,HDWTags = “XX,XX,XX,XX”;XX是点名,注意格式双引号,逗号即可。这里需要特别说明的是,HDWTags显然是一个消息类型的内存点,intouch消息类型最多只能写131个字,所以一般来说不足以满足我们需要的数量,就是写不开的。类比上例,可以用字符串衔接的办法写入长的字符串,类似上面加入HDWTags1、HDWTags2,不够了就加,在末尾写个+,然后下面一个消息变量继续写,以满足我们实际需要; 导入插件的时候系统自动给3个,不过大都还是不够,继续自己手动添加即可,没有上限。 直到写到最后一个,不要再带加号了。
这里我喜欢将第一列和第二列分别写入日期和时间,就是系统内部点,有了这个原始报表也好看些,等第三步的时候自己查询看着都方便。反正无限的,加两列很舒服。 这里需要注意的是,标记名一定要写对!一定不能有重复标记名!一定不能超131!格式!就这些。OK了就行。
1.3 显示部分的脚本 第三部分是显示部分的脚本 HDWInterval = "1H"; HDWDuration = "23H"; HDWWriteFile = 1; IF HDWStatus ==1 THEN #spreadsheet1.csvurl = "D:\Report.csv"; #spreadsheet1.refresh(); #spreadsheet1.displaytoolbar = "False"; #spreadsheet1.ViewOnlyMode = "True"; 这里大多参数比较直观,例如写入数据周期,写入触发变量HdwStatus,刷新等等,不用多数,诸位不熟悉可以除了.csv的路径这一行之外,其他照抄即可。
二、导入office控件做显示 2.1、添加插件 特别—配置—向导安装
弹出选项卡
选择第二个选项卡,然后下面一大堆,翻一翻不难找,找到这个Microsoft Office Spreadsheet 11.0 点击安装,然后关闭即可。这里可能因为诸位的office版本与我不同稍有出入,本人使用的是2007。 安装完成后点击向导帽子,在ActiveX插件中就多了一个sheet。
双击导入的插件
红色圈出部分要注意一下,这里的sheet后面的数字,要跟你前面的脚本匹配。导入多次后这个数字会自加1.注意一下即可。
到这一步报表写入就结束了。 初始报表的生成工作就完成了,如果成功的话,运行你的脚本,就会将你所有的点写入report.csv,并且在intouch当中显示了。
三、将实际的报表模板,关联到初始报表.csv文件当中去
先说原理,原理就是使用excel从report.csv里面读数,写入实际的报表模板里,所以脚本是写在Excel里的。即EXCEL去另一个EXCEL读数,并且存储到对应单元格。 先说个笨办法:
右键sheet,查看代码。进入脚本编辑器。
Private Sub 读取数据_Click() ‘定义按钮,不用动’ Dim xlApp AsApplication ‘声明,不用动,’ Dim book AsExcel.Workbook ‘声明,不用动’ Dim sheet AsExcel.Worksheet ‘声明,不用动’ Dim StrB(20000) AsString ‘定义一个数组,字符串类型’ Dim StrDate As Date Dim A As Integer Dim B As Integer Set xlApp = NewExcel.Application Set xlApp =CreateObject("Excel.Application") xlApp.Visible =True Set book =xlApp.Workbooks.Open("D:\Report.csv") Set sheet =book.Sheets("Report") sheet.Activate StrDate = sheet.Range("A2").Value StrB(1) =sheet.Rang(“B2”).Value xlApp.Quit Set sheet = Nothing Set book = Nothing Set xlApp = Nothing Range("R69").Value = StrDate Range(“R23”).Value= StrB(1) End Sub
第二步读取数据 StrDate = sheet.Range("A2").Value StrB(1) =sheet.Rang(“B2”).Value 很明显就是将report的A2赋值到StrDate这个数里面了,把B2赋值到数组B的第一位了。 第三步写入数据 Range("R69").Value = StrDate Range(“R23”).Value= StrB(1) 很明显就是把StrDate的数写入自己的R69里面了,把数组B的第一位写入R23了。 这就很简单了,逐个查询在report里面的位置,然后用这种赋值两次的办法写进来就可以了。
提交
超越传统直觉,MATLAB/Simulink助力重型机械的智能化转型
新大陆自动识别精彩亮相2024华南国际工业博览会
派拓网络被Forrester评为XDR领域领导者
智能工控,存储强基 | 海康威视带来精彩主题演讲
展会|Lubeworks路博流体供料系统精彩亮相AMTS展会